home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
Pakiet bezpieczenstwa
/
mini Pentoo LiveCD 2006.1
/
mpentoo-2006.1.iso
/
livecd.squashfs
/
lib
/
rcscripts
/
net.modules.d
/
bonding
< prev
next >
Wrap
Text File
|
2006-04-25
|
3KB
|
124 lines
# Copyright (c) 2004-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header$
# Contributed by Roy Marples (uberlord@gentoo.org)
# char* bonding_provides(void)
#
# Returns a string to change module definition for starting up
bonding_provides() {
echo "bonding"
}
# void bonding_depend(void)
#
# Sets up the dependancies for the module
bonding_depend() {
after interface
before vlan dhcp
}
# bool bonding_check_installed(void)
#
# Returns 1 if ifenslave is installed, otherwise 0
bonding_check_installed() {
[[ -x /sbin/ifenslave ]] && return 0
${1:-false} && eerror "For link aggregation (bonding) support, emerge net-misc/ifenslave"
return 1
}
# bool bonding_check_depends(void)
#
# Checks to see if we have the needed functions
bonding_check_depends() {
local f
for f in interface_exists interface_variable interface_up interface_down interface_del_addresses; do
[[ $( type -t ${f} ) == function ]] && continue
eerror "bonding: missing required function ${f}\n"
return 1
done
return 0
}
# bool bonding_post_start(char *iface)
#
# Bonds the interface
bonding_pre_start() {
local iface=${1} slaves s ifvar=$( interface_variable ${1} )
eval slaves=\"\$\{slaves_${ifvar}\[@\]\}\"
[[ -z ${slaves} ]] && return 0
interface_exists ${iface} true || return 1
if [[ ! -f /proc/net/bonding/${iface} ]]; then
eerror "${iface} is not capable of bonding"
return 1
fi
ebegin "Adding slaves to ${iface}"
eindent
einfo "${slaves}"
# Check that our slaves exist
for s in ${slaves}; do
interface_exists ${s} && continue
ewarn "interface ${s} does not exist"
return 1
done
# Must force the slaves to a particular state before adding them
for s in ${slaves}; do
interface_del_addresses ${s}
interface_up ${s}
done
# now force the master to up
interface_up ${iface}
# finally add in slaves
eoutdent
/sbin/ifenslave ${iface} ${slaves} >${devnull}
eend $?
return 0 #important
}
# bool bonding_pre_stop(void)
# Unbonds bonded interfaces
#
# Always returns 0 (true)
bonding_pre_stop() {
local iface=${1} slaves s
bonding_check_installed || return 0
# return silently if this is not a bonding interface
[[ ! -f /proc/net/bonding/${iface} ]] && return 0
# don't trust the config, get the active list instead
slaves=$( awk '/^Slave Interface:/ { printf $3" " }' /proc/net/bonding/${iface} )
[[ -z ${slaves} ]] && return 0
# remove all slaves
ebegin "Removing slaves from ${iface}"
eindent
einfo "${slaves}"
eoutdent
/sbin/ifenslave -d ${iface} ${slaves} &>${devnull}
# reset all slaves
for s in ${slaves}; do
if interface_exists ${s} ; then
interface_del_addresses ${s}
interface_down ${s}
fi
done
eend 0
return 0
}